using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Windows.Forms;

namespace Windows_Explorer.Class
{
    class clsListViewItemComparer : IComparer
    {
        private int col = -1;

        public clsListViewItemComparer()
        {
            col = 0;
        }


        public clsListViewItemComparer(int column)
        {
            col = column;
        }

        /// <summary>
        /// Chúng ta thực thi phương thức so sánh tại đây
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns>trả về giá trị lớn hơn 0 khi x lớn hơn y, bằng 0 khi x bằng y, nhỏ hơn 0 khi x nhỏ hơn y</returns>
        public int Compare(object x, object y)
        {
            int ret;
            switch (col)
            {
                case 0: //cột họ tên - so sánh theo kiểu chuỗi
                case 1:
                    ret = String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
                    break;

                //so sanh kieu so nguyen
                case 2:
                    double size1, size2;
                    string s1=((ListViewItem)x).SubItems[col].Text.ToString();
                    string s2 = ((ListViewItem)y).SubItems[col].Text.ToString();
                    if (s1 == "") size1 = -1;
                    else
                    {
                        string[] arr1 = s1.Split(' ');
                        size1 = Convert.ToDouble(arr1[0]);
                    }
                    if (s2 == "") size2 = -1;
                    else
                    {
                        string[] arr2 = s2.Split(' ');
                        size2 = Convert.ToDouble(arr2[0]);
                    }
                    if (size1 == size2)
                        ret = 0;
                    else if (size1 > size2)
                        ret = 1;
                    else ret = -1;
                    break;
                case 3:
                    {
                        DateTime d1, d2;
                        string x1 = ((ListViewItem)x).SubItems[col].Text.ToString();
                        string y1 = ((ListViewItem)y).SubItems[col].Text.ToString();
                        if (!x1.Contains("GB") && !y1.Contains("GB"))
                        {
                            if (x1 != "")
                            {
                                d1 = Convert.ToDateTime(x1);
                            }
                            else d1 = DateTime.MinValue;
                            if (y1 != "")
                                d2 = Convert.ToDateTime(y1);
                            else d2 = DateTime.MinValue;
                            if (d1 == d2) ret = 0;
                            else if (d1 > d2) ret = 1;
                            else ret = -1;
                        }
                        else ret = 0;
                        break;
                    }
                default: //mặc định ta so sánh theo kiểu chuỗi
                    ret = String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
                    break;
            }
            return ret;
        }
    }
}


    

